const express = require('express'),
    router = express.Router(),
    authServer = require('../common/authServer');

/**
 * @author:ares
 * @datetime:2018/4/4 14:48
 * @description: 验证开发者服务器
 */
router.get('/', authServer);
/* router.use('/', (req, res) => {
    console.log(1111111, req.url)
});
 */

router.post('/', function (req,res) {
    res.writeHead(200, {'Content-Type': 'application/xml'});
    let  xml= req.body.xml,
        // content = '你说的"' + xml.content + '"我不太明白',
        content = '已收到您的消息!',
        reply = replyText(xml.fromusername,xml.tousername,content);
    res.end(reply);
});


/**
 * @author: ares
 * @date: 2018/4/10 17:27
 * @description: 回复文本类型的消息
 * @param {string} toUsername      回复的用户（用户的openid）
 * @param {string} fromUsername    开发者公众号对应的微信号
 * @param {string} content         回复的文本消息
 * @returns {string}               xml格式的字符串
 */
function replyText(toUsername, fromUsername, content) {
    let reply = `<xml>
                    <ToUserName><![CDATA[${toUsername}]]></ToUserName> 
                    <FromUserName><![CDATA[${fromUsername}]]></FromUserName>
                    <CreateTime>${new Date().getTime()}</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[${content}]]></Content>
                </xml>`;
    return reply;
}

/**
 * @author: ares
 * @date: 2018/4/10 17:36
 * @description: 回复图片类型的消息
 * @param {string} tousername      回复的用户（用户的openid）
 * @param {string} fromUsername    开发者公众号对应的微信号
 * @param {string} mediaId         通过素材管理中的接口上传多媒体文件，得到的id
 * @returns {string}               xml格式的字符串
 */
function replyImage(tousername, fromUsername, mediaId) {
    let reply = `<xml>
                    <ToUserName><![CDATA[${tousername}]]></ToUserName> 
                    <FromUserName><![CDATA[${fromUsername}]]></FromUserName>
                    <CreateTime>${new Date().getTime()}</CreateTime>
                    <MsgType><![CDATA[image]]></MsgType>
                    <Image>
                        <MediaId><![CDATA[${mediaId}]]></MediaId>
                    </Image>
                </xml>`;
    return reply;
}

/**
 * @author: ares
 * @date: 2018/4/10 17:38
 * @description: 回复声音类型的消息
 * @param {string} toUsername      回复的用户（用户的openid）
 * @param {string} fromUsername    开发者公众号对应的微信号
 * @param {string} mediaId         通过素材管理中的接口上传多媒体文件，得到的id
 * @returns {string}               xml格式的字符串
 */
function replyVoice(toUsername, fromUsername, mediaId) {
    let reply = `<xml>
                    <ToUserName><![CDATA[${toUsername}]]></ToUserName> 
                    <FromUserName><![CDATA[${fromUsername}]]></FromUserName>
                    <CreateTime>${new Date().getTime()}</CreateTime>
                    <MsgType><![CDATA[voice]]></MsgType>
                    <Voice>
                        <MediaId><![CDATA[${mediaId}]]></MediaId>
                    </Voice>
                </xml>`;
    return reply;
}

/**
 * @author: ares
 * @date: 2018/4/10 17:42
 * @description: 回复视频类型的消息
 * @param {string} toUsername      回复的用户（用户的openid）
 * @param {string} fromUsername    开发者公众号对应的微信号
 * @param {string} mediaId         通过素材管理中的接口上传多媒体文件，得到的id
 * @param {string} title           视频消息的标题(非必需参数)
 * @param {string} description     视频消息的描述（非必需参数）
 * @returns {string}               xml格式的字符串
 */
function replyVideo(toUsername, fromUsername, mediaId, title, description) {
    let reply = `<xml>
                    <ToUserName><![CDATA[${toUsername}]]></ToUserName> 
                    <FromUserName><![CDATA[${fromUsername}]]></FromUserName>
                    <CreateTime>${new Date().getTime()}</CreateTime>
                    <MsgType><![CDATA[video]]></MsgType>
                    <Video>
                        <MediaId><![CDATA[${mediaId}]]></MediaId>
                        <Title><![CDATA[${title}]]></Title>
                        <Description><![CDATA[${description}]]></Description>
                    </Video>
                </xml>`;
    return reply;
}

/**
 * @author: ares
 * @date: 2018/4/10 17:49
 * @description: 回复音乐类型的消息
 * @param {string} toUsername      回复的用户（用户的openid）
 * @param {string} fromUsername    开发者公众号对应的微信号
 * @param {string} thumbMediaId    缩略图的媒体id，通过素材管理中的接口上传多媒体文件，得到的id
 * @param {string} title           音乐标题(非必需参数)
 * @param {string} description     音乐描述（非必需参数）
 * @param {string} musicUrl       音乐链接（非必需参数）
 * @param {string} hqMusicUrl    高质量音乐链接，WIFI环境优先使用该链接播放音乐
 * @returns {string}               xml格式的字符串
 */
function replyMusic(toUsername, fromUsername, thumbMediaId, title, description, musicUrl, hqMusicUrl) {
    let reply = `<xml>
                    <ToUserName><![CDATA[${toUsername}]]></ToUserName> 
                    <FromUserName><![CDATA[${fromUsername}]]></FromUserName>
                    <CreateTime>${new Date().getTime()}</CreateTime>
                    <MsgType><![CDATA[music]]></MsgType>
                    <Music>
                        <Title><![CDATA[${title}]]></Title>
                        <Description><![CDATA[${description}]]></Description>
                        <MusicUrl><![CDATA[${musicUrl}]]></MusicUrl>
                        <HQMusicUrl><![CDATA[${hqMusicUrl}]]></HQMusicUrl>
                        <ThumbMediaId><![CDATA[${thumbMediaId}]]></ThumbMediaId>
                    </Music>
                </xml>`;
    return reply;
}

/**
 * @author: ares
 * @date: 2018/4/10 17:49
 * @description: 回复图文类型的消息
 * @param {string} toUsername      回复的用户（用户的openid）
 * @param {string} fromUsername    开发者公众号对应的微信号
 * @param {number} articleCount    回复图文消息条数（8条以内）
 * @param {array} fromUsername     消息内容
 * @returns {string}               xml格式的字符串
 */
function replyNews(toUsername, fromUsername, articleCount, items) {
    let reply = `<xml>
                    <ToUserName><![CDATA[${toUsername}]]></ToUserName> 
                    <FromUserName><![CDATA[${fromUsername}]]></FromUserName>
                    <CreateTime>${new Date().getTime()}</CreateTime>
                    <MsgType><![CDATA[news]]></MsgType>
                    <ArticleCount>${articleCount}</ArticleCount>`,
        articleitems = buildNewsItems(items);
    return reply + articleitems;
}

/**
 * @author: ares
 * @date: 2018/4/10 18:05
 * @description: 构建回复图文消息是的消息内容
 * @param {array} items  对象类型的数组
 * @param {string} items[n].title          图文消息标题
 * @param {string} items[n].description    图文消息描述
 * @param {string} items[n].picur          图片链接，支持JPG、PNG格式，较好的效果为大图360*200，小图200*200
 * @param {string} items[n].url            点击图文消息跳转链接
 * @returns {string}
 */
function buildNewsItems(items) {
    let articlesStart = `<Articles>`,
        articlesItem = '',
        articlesEnd = `</Articles></xml>`;
    items.forEach(function (item, index) {
        let tempXml = `<item>
                            <Title><![CDATA[${item.title}]]></Title> 
                            <Description><![CDATA[${item.description}]]></Description>
                            <PicUrl><![CDATA[${item.picur}]]></PicUrl>
                            <Url><![CDATA[${item.url}]]></Url>
                        </item>`;
        articlesItem += tempXml;
    })
    return articlesStart + articlesItem + articlesEnd;
}


module.exports = router;
